package pruebasUnitarias.pruebasChoques;

import objetos.ObjetoMovil;
import objetos.aeronaves.*;
import objetos.aeronaves.civiles.Helicoptero;
import objetos.aeronaves.enemigos.*;
import objetos.proyectiles.*;
import org.junit.*;

public class ChoqueProyectilesTest {
	private ObjetoMovil origen;
	private Torpedo torpedo;
	private Adaptable adaptable;
	private Rastreador rastreador;
	private Cohete cohete;
	private LaserShoot laser;
	private Avioneta avioneta;
	private Bomber bomber;
	private Helicoptero helicoptero;
	private Algo42 algo42;

	@Before
	public void setUp() {
		origen = FabricaAeronaves.crearBomber();
		torpedo = new Torpedo(origen);
		adaptable = new Adaptable(origen);
		/* No importan los seteos porque no actuan */
		rastreador = new Rastreador(origen, origen);
		cohete = new Cohete(origen);
		laser = new LaserShoot(origen);

		avioneta = FabricaAeronaves.crearAvioneta();
		bomber = FabricaAeronaves.crearBomber();
		helicoptero = FabricaAeronaves.crearHelicoptero();
		algo42 = new Algo42();
	}

	@Test
	public void testCoheteChocarCivil() {
		Assert.assertFalse(helicoptero.estaDestruido());
		helicoptero.colisionConProyectil(cohete);
		Assert.assertTrue(helicoptero.estaDestruido());

		System.out.println("El cohete choca bien");
	}

	@Test
	public void testLaserChocarEnemigo() {
		Assert.assertFalse(avioneta.estaDestruido());
		avioneta.colisionConProyectil(laser);
		Assert.assertTrue(avioneta.estaDestruido());

		System.out.println("El laser choca bien");
	}

	@Test
	public void testRastreadorChocarEnemigo() {
		int energiaCompletaBomber = bomber.getCantidadEnergia();
		int danioRastreador = rastreador.getCantidadDanio();
		Assert.assertFalse(bomber.estaDestruido());
		bomber.colisionConProyectil(rastreador);
		int energiaEsperadaBomber = energiaCompletaBomber - danioRastreador;
		Assert.assertFalse(bomber.estaDestruido());
		Assert.assertTrue(bomber.getCantidadEnergia() == energiaEsperadaBomber);

		System.out.println("El rastreador choca bien");
	}

	@Test
	public void testAdaptableTorpedoChocarAlgo42() {
		int energiaCompletaAlgo42 = algo42.getCantidadEnergia();
		int danioTorpedo = torpedo.getCantidadDanio();
		Assert.assertFalse(algo42.estaDestruido());
		algo42.colisionConProyectil(torpedo);
		int energiaEsperadaAlgo42 = energiaCompletaAlgo42 - danioTorpedo;
		Assert.assertFalse(algo42.estaDestruido());
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaEsperadaAlgo42);

		System.out.println("El torpedo choca bien");

		int danioAdaptable = algo42.getCantidadEnergia() / 2;
		energiaEsperadaAlgo42 -= danioAdaptable;
		algo42.colisionConProyectil(adaptable);
		Assert.assertTrue(algo42.getCantidadEnergia() == energiaEsperadaAlgo42);
		Assert.assertFalse(algo42.estaDestruido());

		System.out.println("El adaptable choca bien");
	}

}
